﻿using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;

namespace Kaleida.ServiceMonitor.Framework.Responses
{
    public class TraceRouteResponse
    {
        private readonly Exception exception;
        private readonly IList<IPAddress> ipAddresses;

        public TraceRouteResponse(IList<IPAddress> ipAddresses)
        {
            this.ipAddresses = ipAddresses;
        }

        public TraceRouteResponse(Exception exception)
        {
            this.exception = exception;
        }

        public bool Success
        {
            get { return exception == null; }
        }

        public Exception Exception
        {
            get
            {
                if (Success)
                    throw new InvalidOperationException("TraceRoute completed successfully");

                return exception;
            }
        }

        public IList<IPAddress> IpAddresses
        {
            get
            {
                if (!Success)
                    throw new InvalidOperationException("An Exception occured: " + exception.Message);

                return ipAddresses;
            }
        }

        public override string ToString()
        {
            if(Success)
            {
                var route = string.Join(" -> ", ipAddresses);
                return string.Format("Route: {0}", route);
            }
            return "An Exception occured: " + exception.Message;
        }
    }
}
